const fs = require('fs');
const HlsParser = require('hls-parser');


function parseM3u8File(filePath) {
  try {
    // 读取 M3U8 文件内容
    const content = fs.readFileSync(filePath, 'utf8');
    parseM3u8Content(content);
  } catch (error) {
    console.error('Error parsing M3U8 file:', error);
  }
}


function parseM3u8Content(content) {
  try {
    // 解析 M3U8 内容
    const manifest = HlsParser.parse(content);

    // 如果是媒体播放列表，打印媒体段信息
    if (!manifest.isMasterPlaylist) {
        manifest.segments.forEach((segment, index) => {
            console.log(`媒体段 ${index + 1}:`);
            console.log('URL:', segment.uri);
            console.log('时长:', segment.duration);
            console.log('Title:', segment.title || '(not set)');
            console.log('序列号:', segment.sequenceNumber); // 媒体段的序列号

            // 如果媒体段包含其他属性，如分辨率、码率等，也可以打印出来
            // 例如，如果segment对象有resolution属性，可以这样打印：
            if (segment.resolution) {
              console.log('分辨率:', segment.resolution);
            }
            // 如果segment对象有bandwidth属性，可以这样打印：
            if (segment.bandwidth) {
              console.log('码率:', segment.bandwidth);
            }
            // ... 可以继续打印其他属性
            // ... 可以继续打印其他属性，如分辨率、码率等
            //byterange, discontinuity, key (加密信息) 等
        });
    }

    // 打印加密信息（如果存在）
    if (manifest.encryption) {
        console.log('加密方法:', manifest.encryption.method);
        console.log('密钥 URI:', manifest.encryption.uri);
        // ... 可以继续打印其他加密相关的属性
    }
    // 打印解析后的基本信息
    console.log('Manifest Version:', manifest.version);
    console.log('Target Duration:', manifest.targetDuration);
    // 打印播放列表类型
    console.log('播放列表类型:', manifest.isMasterPlaylist ? '主播放列表' : '媒体播放列表');
    
    
  } catch (error) {
    console.error('Error parsing M3U8 file:', error);
  }
}

module.exports = { parseM3u8File }